1 |
- {"version":3,"file":"static/chunks/pages/chapter_info/[chapterId]-c6b428bc27e88c38.js","mappings":"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","sources":["webpack://_N_E/?6eae","webpack://_N_E/./src/components/NextSeoWrapper.tsx","webpack://_N_E/./src/components/chapters/Info/index.tsx","webpack://_N_E/./src/components/chapters/Info/InfoPage.tsx","webpack://_N_E/./src/pages/_error.tsx","webpack://_N_E/./src/pages/chapter_info/[chapterId].tsx","webpack://_N_E/./src/utils/image.ts","webpack://_N_E/./src/utils/string.ts","webpack://_N_E/./src/components/chapters/Info/Info.module.scss","webpack://_N_E/./src/pages/_error.module.scss"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/chapter_info/[chapterId]\",\n function () {\n return require(\"private-next-pages/chapter_info/[chapterId].tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/chapter_info/[chapterId]\"])\n });\n }\n ","import React from 'react';\n\nimport { NextSeo } from 'next-seo';\n\nimport { SEOProps } from '@/utils/seo';\nimport { truncateString } from '@/utils/string';\n\ninterface Props extends SEOProps {\n url?: string;\n image?: string;\n imageAlt?: string;\n imageWidth?: number;\n imageHeight?: number;\n}\n\nconst NextSeoWrapper: React.FC<Props> = (props) => {\n const { url, image, imageAlt, imageHeight, imageWidth, openGraph, description, ...rest } = props;\n const openGraphParams = {\n ...(openGraph && { openGraph }),\n ...(url && { url }),\n ...(image && {\n images: [{ url: image, width: imageWidth, height: imageHeight, alt: imageAlt }],\n }),\n };\n const params = {\n ...rest,\n ...(description && { description: truncateString(description, 150) }),\n };\n return <NextSeo {...params} openGraph={openGraphParams} />;\n};\n\nexport default NextSeoWrapper;\n","/* eslint-disable react/no-danger */\n\nimport React from 'react';\n\nimport Image from 'next/image';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './Info.module.scss';\n\nimport Button, { ButtonSize, ButtonVariant } from '@/dls/Button/Button';\nimport BackIcon from '@/icons/west.svg';\nimport { logButtonClick } from '@/utils/eventLogger';\nimport { getBlurDataUrl } from '@/utils/image';\nimport { toLocalizedNumber } from '@/utils/locale';\nimport { getSurahNavigationUrl } from '@/utils/navigation';\nimport Chapter from 'types/Chapter';\nimport ChapterInfo from 'types/ChapterInfo';\n\ninterface Props {\n chapter?: Chapter;\n chapterInfo?: ChapterInfo;\n}\n\nconst Info: React.FC<Props> = ({ chapter, chapterInfo }) => {\n const { t, lang } = useTranslation();\n return (\n <div className={styles.container}>\n <div className={styles.infoBody}>\n <div>\n <div className={styles.backContainer}>\n <Button\n variant={ButtonVariant.Ghost}\n href={getSurahNavigationUrl(chapterInfo.chapterId)}\n className={styles.backIcon}\n prefix={<BackIcon />}\n size={ButtonSize.Small}\n onClick={() => {\n logButtonClick('chapter_info_go_back');\n }}\n >\n {t('surah-info:go-to-surah')}\n </Button>\n </div>\n <div className={styles.imageContainer}>\n <Image\n src={`/images/${chapter.revelationPlace}.jpg`}\n layout=\"fill\"\n placeholder=\"blur\"\n blurDataURL={getBlurDataUrl(200, 200)}\n alt={t(`surah-info:${chapter.revelationPlace}`)}\n />\n </div>\n </div>\n <div className={styles.infoTextContainer}>\n <div className={styles.headerContainer}>\n <div className={styles.surahName}>\n {t('common:surah')} {chapter.transliteratedName}\n </div>\n <div className={styles.detailsContainer}>\n <div>\n <p className={styles.detailHeader}>{t('common:ayahs')}</p>\n <p>{toLocalizedNumber(chapter.versesCount, lang)}</p>\n </div>\n <div>\n <p className={styles.detailHeader}>{t('surah-info:revelation-place')}</p>\n <p>{t(`surah-info:${chapter.revelationPlace}`)}</p>\n </div>\n </div>\n </div>\n <div dangerouslySetInnerHTML={{ __html: chapterInfo.text }} className={styles.textBody} />\n </div>\n </div>\n </div>\n );\n};\n\nexport default Info;\n","import React from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport Info from '.';\n\nimport NextSeoWrapper from '@/components/NextSeoWrapper';\nimport { getChapterOgImageUrl } from '@/lib/og';\nimport { getLanguageAlternates, toLocalizedNumber } from '@/utils/locale';\nimport { getCanonicalUrl, getSurahInfoNavigationUrl } from '@/utils/navigation';\nimport Error from 'src/pages/_error';\nimport { ChapterInfoResponse, ChapterResponse } from 'types/ApiResponses';\n\ninterface Props {\n chapterResponse?: ChapterResponse;\n chapterInfoResponse?: ChapterInfoResponse;\n hasError?: boolean;\n}\n\nconst InfoPage: React.FC<Props> = ({ hasError, chapterInfoResponse, chapterResponse }) => {\n const { t, lang } = useTranslation('common');\n if (hasError) {\n return <Error statusCode={500} />;\n }\n const navigationUrl = getSurahInfoNavigationUrl(chapterResponse.chapter.slug);\n\n return (\n <>\n <NextSeoWrapper\n title={`${t('surah')} ${chapterResponse.chapter.transliteratedName} - ${toLocalizedNumber(\n 1,\n lang,\n )}-${toLocalizedNumber(chapterResponse.chapter.versesCount, lang)}`}\n image={getChapterOgImageUrl({\n chapterId: chapterInfoResponse.chapterInfo.id,\n locale: lang,\n })}\n imageWidth={1200}\n imageHeight={630}\n canonical={getCanonicalUrl(lang, navigationUrl)}\n languageAlternates={getLanguageAlternates(navigationUrl)}\n description={chapterInfoResponse.chapterInfo.shortText}\n />\n <Info chapter={chapterResponse.chapter} chapterInfo={chapterInfoResponse.chapterInfo} />\n </>\n );\n};\n\nexport default InfoPage;\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport classNames from 'classnames';\nimport { useRouter } from 'next/router';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './_error.module.scss';\n\nimport Button from '@/dls/Button/Button';\nimport Link, { LinkVariant } from '@/dls/Link/Link';\n\n// reference: https://nextjs.org/docs/advanced-features/custom-error-page#more-advanced-error-page-customizing\ntype ErrorProps = {\n statusCode?: number;\n hasFullWidth?: boolean;\n};\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst Error = ({ statusCode, hasFullWidth = true }: ErrorProps) => {\n const { t } = useTranslation('error');\n const router = useRouter();\n\n // if previous page url exist, go back, otherwise go to home\n const onBackButtonClicked = () => {\n if (document && document.referrer) {\n router.back();\n return;\n }\n router.push('/'); // go to home\n };\n return (\n <div\n className={classNames(styles.container, {\n [styles.withFullWidth]: hasFullWidth,\n })}\n >\n <h1 className={styles.title}>{t('title')}</h1>\n <div className={styles.goBack}>\n <Button onClick={onBackButtonClicked}>{t('go-back')}</Button>\n </div>\n <p className={styles.reportBug}>\n {t('if-persist')}{' '}\n <Link href=\"https://feedback.quran.com/\" variant={LinkVariant.Highlight}>\n {t('report-cta')}\n </Link>\n </p>\n </div>\n );\n};\n\nexport default Error;\n","import { GetStaticPaths, GetStaticProps, NextPage } from 'next';\n\nimport InfoPage from '@/components/chapters/Info/InfoPage';\nimport { getChapterData, getAllChaptersData } from '@/utils/chapter';\nimport {\n REVALIDATION_PERIOD_ON_ERROR_SECONDS,\n ONE_MONTH_REVALIDATION_PERIOD_SECONDS,\n} from '@/utils/staticPageGeneration';\nimport { isValidChapterId } from '@/utils/validator';\nimport { getChapterIdBySlug, getChapterInfo } from 'src/api';\nimport { ChapterInfoResponse, ChapterResponse } from 'types/ApiResponses';\nimport ChaptersData from 'types/ChaptersData';\n\ninterface Props {\n chapterResponse?: ChapterResponse;\n chapterInfoResponse?: ChapterInfoResponse;\n hasError?: boolean;\n chaptersData: ChaptersData;\n}\n\nconst ChapterInfo: NextPage<Props> = (props) => {\n return <InfoPage {...props} />;\n};\n\nexport const getStaticProps: GetStaticProps = async ({ params, locale }) => {\n let chapterIdOrSlug = String(params.chapterId);\n // we need to validate the chapterId first to save calling BE since we haven't set the valid paths inside getStaticPaths to avoid pre-rendering them at build time.\n if (!isValidChapterId(chapterIdOrSlug)) {\n const sluggedChapterId = await getChapterIdBySlug(chapterIdOrSlug, locale);\n // if it's not a valid slug\n if (!sluggedChapterId) {\n return { notFound: true };\n }\n chapterIdOrSlug = sluggedChapterId;\n }\n const chaptersData = await getAllChaptersData(locale);\n try {\n const chapterInfoResponse = await getChapterInfo(chapterIdOrSlug, locale);\n return {\n props: {\n chaptersData,\n chapterInfoResponse,\n chapterResponse: { chapter: getChapterData(chaptersData, chapterIdOrSlug) },\n },\n revalidate: ONE_MONTH_REVALIDATION_PERIOD_SECONDS, // chapter info will be generated at runtime if not found in the cache, then cached for subsequent requests for 30 days.\n };\n } catch (error) {\n return {\n props: { hasError: true },\n revalidate: REVALIDATION_PERIOD_ON_ERROR_SECONDS, // 35 seconds will be enough time before we re-try generating the page again.\n };\n }\n};\n\nexport const getStaticPaths: GetStaticPaths = async () => ({\n paths: [], // no pre-rendered chapters at build time.\n fallback: 'blocking', // will server-render pages on-demand if the path doesn't exist.\n});\n\nexport default ChapterInfo;\n","const DEFAULT_COLOR1 = '#f7f7f7';\nconst DEFAULT_COLOR2 = '#d1d1d1';\n\n/**\n * Convert a string to a base64.\n *\n * @param {string} str\n * @returns {string}\n */\nconst toBase64 = (str: string): string =>\n typeof window === 'undefined' ? Buffer.from(str).toString('base64') : window.btoa(str);\n\n/**\n * Get the shimmer SVG.\n *\n * @param {number} w\n * @param {number} h\n * @param {string} color1\n * @param {string} color2\n * @returns {string}\n */\nexport const shimmer = (w: number, h: number, color1: string, color2: string): string => `\n <svg width=\"${w}\" height=\"${h}\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <defs>\n <linearGradient id=\"g\">\n <stop stop-color=\"${color1}\" offset=\"20%\" />\n <stop stop-color=\"${color2}\" offset=\"50%\" />\n <stop stop-color=\"${color1}\" offset=\"70%\" />\n </linearGradient>\n </defs>\n <rect width=\"${w}\" height=\"${h}\" fill=\"${color1}\" />\n <rect id=\"r\" width=\"${w}\" height=\"${h}\" fill=\"url(#g)\" />\n <animate xlink:href=\"#r\" attributeName=\"x\" from=\"-${w}\" to=\"${w}\" dur=\"1.2s\" repeatCount=\"indefinite\" />\n </svg>`;\n\n/**\n * Get the blue data url that Next.js will use before loading the actual image.\n *\n * @param {number} h Height\n * @param {number} w Width\n * @param {string} color1\n * @param {string} color2\n * @returns {string}\n */\nexport const getBlurDataUrl = (\n h: number,\n w: number,\n color1: string = DEFAULT_COLOR1,\n color2: string = DEFAULT_COLOR2,\n): string => `data:image/svg+xml;base64,${toBase64(shimmer(w, h, color1, color2))}`;\n","/**\n * Shorten a text by setting the maximum number of characters\n * by the value of the parameter and adding \"...\" at the end.\n *\n * @param {string} rawString\n * @param {number} length\n * @param {string} suffix\n * @returns {string}\n */\nexport const truncateString = (rawString: string, length: number, suffix = '...'): string => {\n const characters = rawString.split('', length);\n let shortenedText = '';\n for (let index = 0; index < characters.length; index += 1) {\n const character = characters[index];\n if (shortenedText.length === length - 1) {\n shortenedText = `${shortenedText}${character}${suffix}`;\n break;\n }\n shortenedText = `${shortenedText}${character}`;\n }\n return shortenedText;\n};\n\n/**\n * Strip HTML tags from a string.\n *\n * @param {string} rawString\n * @returns {string}\n */\nexport const stripHTMLTags = (rawString: string): string => rawString.replace(/(<([^>]+)>)/gi, '');\n\n/**\n * Convert a slugified collection id to collection id only after\n * removing the slug.\n *\n * @param {string} slugifiedCollectionId\n * @returns {string}\n */\nexport const slugifiedCollectionIdToCollectionId = (slugifiedCollectionId: string): string => {\n if (!slugifiedCollectionId) {\n return '';\n }\n const splits = slugifiedCollectionId.split('-');\n // if there is no slug in the url (collections with a name that cannot be slugified e.g. emoticons)\n if (splits.length === 1) {\n return splits[0];\n }\n return splits[splits.length - 1];\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Info_container__F5EE7\",\"infoBody\":\"Info_infoBody__5p7Nu\",\"backContainer\":\"Info_backContainer__6CVP7\",\"backIcon\":\"Info_backIcon__ywZyE\",\"imageContainer\":\"Info_imageContainer__48mv2\",\"textBody\":\"Info_textBody__Tx5BZ\",\"infoTextContainer\":\"Info_infoTextContainer__N2E46\",\"headerContainer\":\"Info_headerContainer__Gt5qK\",\"surahName\":\"Info_surahName__X8hE6\",\"detailsContainer\":\"Info_detailsContainer__YGVEI\",\"detailHeader\":\"Info_detailHeader__IXEu1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"_error_container__vJFnH\",\"withFullWidth\":\"_error_withFullWidth__VEzYc\",\"title\":\"_error_title__oLWAK\",\"goBack\":\"_error_goBack__U4WNd\",\"reportBug\":\"_error_reportBug__tsKmR\"};"],"names":["window","__NEXT_P","push","props","url","image","imageAlt","imageHeight","imageWidth","openGraph","description","rest","openGraphParams","images","width","height","alt","params","truncateString","NextSeo","chapter","chapterInfo","useTranslation","t","lang","div","className","styles","Button","variant","ButtonVariant","href","getSurahNavigationUrl","chapterId","prefix","BackIcon","size","ButtonSize","onClick","logButtonClick","Image","src","revelationPlace","layout","placeholder","blurDataURL","getBlurDataUrl","transliteratedName","p","toLocalizedNumber","versesCount","dangerouslySetInnerHTML","__html","text","hasError","chapterInfoResponse","chapterResponse","Error","statusCode","navigationUrl","getSurahInfoNavigationUrl","slug","NextSeoWrapper","title","getChapterOgImageUrl","id","locale","canonical","getCanonicalUrl","languageAlternates","getLanguageAlternates","shortText","Info","hasFullWidth","router","useRouter","classNames","h1","document","referrer","back","Link","LinkVariant","InfoPage","DEFAULT_COLOR1","DEFAULT_COLOR2","toBase64","str","btoa","shimmer","w","h","color1","color2","rawString","length","suffix","characters","split","shortenedText","index","character","stripHTMLTags","replace","slugifiedCollectionIdToCollectionId","slugifiedCollectionId","splits","module","exports"],"sourceRoot":""}
|